﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using fideeraSoft.DAO;
using System.Data.SqlClient;
using fideeraSoft.Utils;
using fideeraSoft.Entities;
using System.Data;

namespace fideeraSoft.DAOimpl
{
    public class MateriaPrimaDAOSQLimpl:MateriaPrimaDAO
    {
        #region BUSCAR ULTIMO ID DE MATERIA PRIMA
        public int buscarNuevoUltimoIdMateriaPrimaEnBD()
        {
            int ID = 0;
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "SELECT TOP 1 ID FROM MateriaPrima ORDER BY ID DESC ";
                SqlCommand cmd = new SqlCommand(query, conn);

                SQLclass.commandQuery(conn, cmd, query);
                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {

                    while (reader.Read())
                    {
                        ID = reader.GetInt32(0);
                        //  CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] ID : " + ID, CLogger.ERROR);      //DEBUG
                    }
                    ID++;
                }
                else
                {
                    ID = 1;
                }
            }
            catch (Exception e)
            {
                CLogger.Append("[buscarNuevoUltimoIdMateriaPrimaEnBD] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[buscarNuevoUltimoIdMateriaPrimaEnBD] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
            // CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] RETURN ID : " + ID, CLogger.ERROR);      //DEBUG
            return ID;
        }

        #endregion

        #region Buscar Materia Prima Por nombre

        public MateriaPrima buscarMateriaPrimaPorNombre(string nombre)
        {
            MateriaPrima materiaPrima = null;
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "SELECT * FROM MateriaPrima WHERE nombre='" + nombre+ "'";
                SqlCommand cmd = new SqlCommand(query, conn);

                SQLclass.commandQuery(conn, cmd, query);
                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    materiaPrima = new MateriaPrima();
                    while (reader.Read())
                    {
                        materiaPrima.IdMateriaPrima= reader.GetInt32(0);
                        materiaPrima.Nombre = reader.GetString(1);
                        materiaPrima.Codigo = reader.GetString(2);
                        materiaPrima.Descripcion= reader.GetString(3);
                        materiaPrima.Unidad= reader.GetString(4);                        
                        materiaPrima.Caracteristicas = reader.GetString(5);

                        //materiaPrima.FechaElaboracion= reader.GetDateTime(4);
                        //materiaPrima.FechaVencimiento= reader.GetDateTime(5);                        
                        //  CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] ID : " + ID, CLogger.ERROR);      //DEBUG
                    }

                }
                else
                {
                    materiaPrima = null;
                }
            }
            catch (Exception e)
            {
                CLogger.Append("[buscarMateriaPrimaPorNombre] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[buscarMateriaPrimaPorNombre] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
            // CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] RETURN ID : " + ID, CLogger.ERROR);      //DEBUG
            return materiaPrima;
        }       

        #endregion


        #region ALTA MateriaPrima
        public void altaMateriaPrima(MateriaPrima materiaPrima)
        {
            SqlConnection conn = null;
            try
            {
                conn = SQLclass.conectarSQL();
                conn.Open();

                string query = "SET IDENTITY_INSERT MateriaPrima ON; INSERT INTO MateriaPrima (ID,nombre,codigo,descripcion,unidad,caracteristicas) VALUES (@IdMateriaPrima,@Nombre,@Codigo,@Descripcion,@Unidad,@Caracteristicas)";
                //string query = "INSERT INTO Proveedor (razonSocial,responsable,cuil,direccion,localidad,provincia,telefono,celular) VALUES (@RazonSocial,@Responsable,@Cuil,@Direccion,@Localidad,@Provincia,@Telefono,@Celular)";
                SqlCommand cmd = new SqlCommand(query, conn);

                cmd.Parameters.AddWithValue("@IdMateriaPrima", materiaPrima.IdMateriaPrima);
                cmd.Parameters.AddWithValue("@Nombre", materiaPrima.Nombre);
                cmd.Parameters.AddWithValue("@Codigo", materiaPrima.Codigo);
                cmd.Parameters.AddWithValue("@Descripcion", materiaPrima.Descripcion);
                
                cmd.Parameters.AddWithValue("@Unidad", materiaPrima.Unidad);
                cmd.Parameters.AddWithValue("@Caracteristicas", materiaPrima.Caracteristicas);
                
              //  cmd.Parameters.AddWithValue("@FechaElab", materiaPrima.FechaElaboracion);

              //  cmd.Parameters.AddWithValue("@FechaElab", SqlDbType.DateTime).Value=materiaPrima.FechaElaboracion);                

               // cmd.Parameters.AddWithValue("@FechaVenc", materiaPrima.FechaVencimiento);

                cmd.ExecuteNonQuery();
                //cmd.Parameters.Clear();
                // cmd.CommandText = "SELECT @@IDENTITY";
                // int insertID=Convert.ToInt32(cmd.ExecuteScalar());

                //  cmd.Dispose();
                cmd = null;

                //cmd.Connection.Close();
                /*DataTable dt = new DataTable();
                DA.Fill(dt);
                */
            }
            catch (Exception e)
            {
                CLogger.Append("[altaMateriaPrima] Exception alta: " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[altaMateriaPrima] Exception alta: " + e);
            }
            finally
            {
                conn.Close();
            }

        }

        #endregion




        #region Buscar Materia Prima Por ID

        public MateriaPrima buscarMateriaPrimaPorID(int id)
        {
            MateriaPrima materiaPrima = null;
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "SELECT * FROM MateriaPrima WHERE ID='" + id.ToString() + "'";
                SqlCommand cmd = new SqlCommand(query, conn);

                SQLclass.commandQuery(conn, cmd, query);
                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    materiaPrima = new MateriaPrima();
                    while (reader.Read())
                    {
                        materiaPrima.IdMateriaPrima = reader.GetInt32(0);
                        materiaPrima.Nombre = reader.GetString(1);
                        materiaPrima.Codigo = reader.GetString(2);
                        materiaPrima.Descripcion = reader.GetString(3);
                        materiaPrima.Unidad = reader.GetString(4);
                        materiaPrima.Caracteristicas = reader.GetString(5);

                        //materiaPrima.FechaElaboracion= reader.GetDateTime(4);
                        //materiaPrima.FechaVencimiento= reader.GetDateTime(5);                        
                        //  CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] ID : " + ID, CLogger.ERROR);      //DEBUG
                    }

                }
                else
                {
                    materiaPrima = null;
                }
            }
            catch (Exception e)
            {
                CLogger.Append("[buscarMateriaPrimaPorID] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[buscarMateriaPrimaPorID] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
            // CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] RETURN ID : " + ID, CLogger.ERROR);      //DEBUG
            return materiaPrima;
        }

        #endregion



        #region Eliminar MATERIA PRIMA POR ID

        public void eliminarMateriaPrimaPorID(int id)
        {
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "DELETE FROM MateriaPrima WHERE ID='"+id.ToString()+"'";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.ExecuteNonQuery();

            }
            catch (Exception e)
            {
                CLogger.Append("[eliminarTodasLasMateriasPrimasEnDb] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[eliminarTodasLasMateriasPrimasEnDb] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
        }
        #endregion


        #region Eliminar TODA MATERIA PRIMA EN DB

        public void eliminarTodasLasMateriasPrimasEnDb()
        {
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "DELETE FROM MateriaPrima";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.ExecuteNonQuery();

            }
            catch (Exception e)
            {
                CLogger.Append("[eliminarTodasLasMateriasPrimasEnDb] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[eliminarTodasLasMateriasPrimasEnDb] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
        }
        #endregion


    }
}
